package com.xm.service.reception_desk;

import com.xm.dao.reception_desk.ShoppingCartDao;
import com.xm.entity.ShoppingCart;
import com.xm.exception.SqlErrorException;

import java.util.List;

/**
 * 购物车Service
 * @author 康文程
 * @date 2024-1-3 下午 06:49
 */
public class ShoppingCartService {
    private final ShoppingCartDao dao = new ShoppingCartDao();
    /**
     * 更新购物车中所有商品的选中状态
     *
     * @param userId 用户ID
     * @param status 选中状态，0表示未选中，1表示选中
     * @return 成功返回true，失败返回false
     * @throws SqlErrorException SQL执行异常
     */
    public boolean updateAllSelectedStatus(Integer userId, Integer status) throws SqlErrorException {
        return dao.updateAllSelectedStatus(userId,status);
    }
    /**
     * 更新购物车商品的选中状态
     *
     * @param shoppingCartId 购物车ID
     * @param isSelected     商品选中状态，true表示选中，false表示未选中
     * @return 成功返回true，失败返回false
     * @throws SqlErrorException SQL执行异常
     */
    public boolean updateSelectedStatus(Integer shoppingCartId, Integer isSelected) throws SqlErrorException {
        return dao.updateSelectedStatus(shoppingCartId, isSelected);
    }
    /**
     * 更新购物车中商品的数量
     *
     * @param shoppingCartId 购物车ID
     * @param quantity       商品数量
     * @return 成功返回true，失败返回false
     * @throws SqlErrorException SQL执行异常
     */
    public boolean updateQuantity(Integer shoppingCartId, Integer quantity) throws SqlErrorException {
        return dao.updateQuantity(shoppingCartId, quantity);
    }
    /**
     * 根据用户信息表Id查询购物车信息
     * @param informationId 用户信息表Id
     * @return List<对象>
     * @throws SqlErrorException 抛出SQL错误
     */
    public List<ShoppingCart> getShoppingCartByInformationId(Integer informationId) throws SqlErrorException {
        return dao.getShoppingCartByInformationId(informationId);
    }
    /**
     * 添加商品到购物车
     *
     * @param userId      用户ID
     * @param commodityId 商品ID
     * @param specificationIds 规格Id 多个Id用,分隔
     * @return 成功返回true，失败返回false
     * @throws SqlErrorException SQL执行异常
     */
    public boolean addToShoppingCart(Integer userId, Integer commodityId,String specificationIds,String insuranceIds) throws SqlErrorException {
        return dao.addToShoppingCart(userId, commodityId,specificationIds,insuranceIds);
    }
    /**
     * 从购物车中删除商品
     *
     * @param shoppingCartId 购物车ID
     * @return 成功返回true，失败返回false
     * @throws SqlErrorException SQL执行异常
     */
    public boolean deleteFromShoppingCart(Integer shoppingCartId) throws SqlErrorException {
        return dao.deleteFromShoppingCart(shoppingCartId);
    }
    /**
     * 修改购物车中商品的保险ID
     *
     * @param shoppingCartId 购物车ID
     * @param insuranceIds   保险ID
     * @return 成功返回true，失败返回false
     * @throws SqlErrorException SQL执行异常
     */
    public boolean updateInsuranceIds(Integer shoppingCartId, String insuranceIds) throws SqlErrorException {
        return dao.updateInsuranceIds(shoppingCartId, insuranceIds);
    }
    /**
     * 查询购物车中商品的数量总和
     *
     * @param informationId 用户信息表Id
     * @return 数量总和
     * @throws SqlErrorException SQL执行异常
     */
    public Integer getShoppingCartQuantity(Integer informationId) throws SqlErrorException {
        return dao.getShoppingCartQuantity(informationId);
    }
    /**
     * 查询购物车中是否存在已选中的商品
     *
     * @param informationId 用户信息表ID
     * @return 存在返回true，不存在返回false
     * @throws SqlErrorException SQL执行异常
     **/
    public boolean hasSelectedShoppingCart(Integer informationId) throws SqlErrorException {
        return dao.hasSelectedShoppingCart(informationId);
    }
    /**
     * 根据用户信息表Id查询被勾选购物车商品信息并查询出限购数量和库存数量和查询出最大限购数量
     * @param informationId 用户信息表Id
     * @return List<对象>
     * @throws SqlErrorException 抛出SQL错误
     */
    public List<ShoppingCart> getSelectedShoppingCartByInformationId(Integer informationId) throws SqlErrorException {
        return dao.getSelectedShoppingCartAndGiftsByInformationId(informationId);
    }
    /**
     * 根据用户信息表ID和选中状态查询购物车商品信息
     *
     * @param informationId 用户信息表ID
     * @return List<ShoppingCart>  集合对象
     * @throws SqlErrorException 抛出SQL错误
     */
    public List<ShoppingCart> getSelectedShoppingCartByInformationIdTwo(Integer informationId) throws SqlErrorException {
        return dao.getSelectedShoppingCartByInformationIdTwo(informationId);
    }
    /**
     * 根据购物车ID删除购物车中商品
     *
     * @param shoppingCartId 购物车ID
     * @return 成功返回true，失败返回false
     * @throws SqlErrorException SQL执行异常
     */
    public boolean deleteShoppingCartById(Integer shoppingCartId) throws SqlErrorException {
        return dao.deleteShoppingCartById(shoppingCartId);
    }
    /**
     * 根据commodityId和informationId是否有商品有则修改数量没有则添加
     * @param shoppingCart 购物车实体类
     * @return boolean true修改成功 false修改失败
     */
    public boolean getShoppingCartByCommodityIdAndInformationId(ShoppingCart shoppingCart) {
        return dao.getShoppingCartByCommodityIdAndInformationId(shoppingCart);
    }
}
